package com.kexio.enterprise.observability.logging.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 性能监控注解
 * 
 * 用于标记需要进行性能监控的方法
 * 
 * 使用示例：
 * <pre>
 * &#64;PerformanceMonitor
 * public void expensiveOperation() {
 *     // 耗时操作
 * }
 * 
 * &#64;PerformanceMonitor(slowThreshold = 500, description = "数据导出")
 * public void exportData() {
 *     // 数据导出操作
 * }
 * </pre>
 * 
 * @author Kexio
 * @since 1.0.0
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface PerformanceMonitor {

    /**
     * 慢方法阈值（毫秒）
     * 超过此阈值的方法将被标记为慢方法
     */
    long slowThreshold() default 1000;

    /**
     * 是否启用性能监控
     */
    boolean enabled() default true;

    /**
     * 监控描述
     */
    String description() default "";

    /**
     * 是否记录方法参数
     */
    boolean logArgs() default false;

    /**
     * 是否记录返回结果
     */
    boolean logResult() default false;

    /**
     * 是否记录到指标系统
     */
    boolean recordMetrics() default true;

    /**
     * 监控级别
     */
    MonitorLevel level() default MonitorLevel.INFO;

    /**
     * 标签
     * 用于分类和过滤
     */
    String[] tags() default {};

    /**
     * 监控级别枚举
     */
    enum MonitorLevel {
        /**
         * 调试级别
         */
        DEBUG,
        
        /**
         * 信息级别
         */
        INFO,
        
        /**
         * 警告级别
         */
        WARN,
        
        /**
         * 错误级别
         */
        ERROR
    }
}
